/************************************************************************

								Heroes IV
					  Copyright 2000, The 3DO Company

	------------------------------------------------------------------
  						 abstract_function.h

	$Header: /heroes4/abstract_function.h $

	$NoKeywords: $

 ************************************************************************/

#if !defined( ABSTRACT_FUNCTION_H_INCLUDED )
#define ABSTRACT_FUNCTION_H_INCLUDED

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

/////////////////////////////////////////////////////////////////////////////
// t_abstract_function_0

template < typename t_result >
class t_abstract_function_0
{
public:
	// Types
	typedef t_result result_type;

	// Destructor
	virtual ~t_abstract_function_0() {}

	// Operator
	virtual t_result operator()() = 0;
};

/////////////////////////////////////////////////////////////////////////////
// t_abstract_function_1

template < typename t_result, typename t_arg >
class t_abstract_function_1
{
public:
	// Types
	typedef t_result result_type;
	typedef t_arg argument_type;

	// Destructor
	virtual ~t_abstract_function_1() {}

	// Operator
	virtual t_result operator()( t_arg arg ) = 0;
};

/////////////////////////////////////////////////////////////////////////////
// t_abstract_function_2

template < typename t_result, typename t_arg1, typename t_arg2 >
class t_abstract_function_2
{
public:
	// Types
	typedef t_result result_type;
	typedef t_arg1 first_argument_type;
	typedef t_arg2 second_argument_type;

	// Destructor
	virtual ~t_abstract_function_2() {}

	// Operator
	virtual t_result operator()( t_arg1 arg1, t_arg2 arg2 ) = 0;
};

/////////////////////////////////////////////////////////////////////////////
// t_abstract_function_3

template < typename t_result, typename t_arg1, typename t_arg2, typename t_arg3 >
class t_abstract_function_3
{
public:
	// Types
	typedef t_result result_type;
	typedef t_arg1 first_argument_type;
	typedef t_arg2 second_argument_type;
	typedef t_arg3 third_argument_type;

	// Destructor
	virtual ~t_abstract_function_3() {}

	// Operator
	virtual t_result operator()( t_arg1 arg1, t_arg2 arg2, t_arg3 arg3 ) = 0;
};

#endif // !defined( ABSTRACT_FUNCTION_H_INCLUDED )
